package cc.autoapi.pucong.liteflow.design.service;

import cc.autoapi.pucong.liteflow.design.mobal.HeaderDesignUser;
import cc.autoapi.pucong.liteflow.design.mobal.dto.*;
import cc.autoapi.pucong.liteflow.design.mobal.vo.*;
import cc.autoapi.pucong.liteflow.design.mobal.dto.*;
import cc.autoapi.pucong.liteflow.design.mobal.vo.*;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

public interface DesignService {
    /**
     * 新增时，生成uuid的方法
     * @return
     */
    default String generateUuid() {
        return "";
    }

    /**
     * 分页查询编排
     * @param pageNum
     * @param pageSize
     * @param searchKey
     * @return
     */
    BasePageVo<ChainPageVo> getChainListByPage(int pageNum, int pageSize, String searchKey);

    /**
     * 查询编排
     * @param searchKey
     * @return
     */
    List<ChainPageVo> getChainList(String searchKey);
    /**
     * 获取编排基本信息
     * @param chainId
     * @return
     */
    ChainPageVo getChainInfoById(String chainId);

    /**
     * 新增编排
     * @param dto
     * @return
     */
    Boolean addChain(ChainInsertDto dto);

    /**
     * 修改编排基本信息
     * @param chainId
     * @param dto
     * @return
     */
    Boolean updateChainById(String chainId, ChainUpdateDto dto);

    /**
     * 删除编排
     * @param chainId
     * @return
     */
    Boolean deleteChainById(String chainId);

    /**
     * 修改编排为启动状态
     * @param chainId
     * @return
     */
    Boolean updateChainEnableById(String chainId);

    /**
     * 修改编排为禁用状态
     * @param chainId
     * @return
     */
    Boolean updateChainDisableById(String chainId);

    /**
     *
     * @param chainId
     * @param dto
     * @return
     */
    Boolean updateChainElById(String chainId, ChainElUpdateDto dto);

    /**
     * 获取所有节点，编排时使用
     * @param searchKey
     * @return
     */
    List<NodeVo> getAllNodeList(String searchKey);

    /**
     * 获取编排的el表达式
     * @param chainId
     * @return
     */
    String getChainElById(String chainId);

    /**
     * 是否需要登录
     * @return
     */
    Boolean needLogin();

    /**
     * 是否登录
     * @return
     */
    Boolean isLogin();

    /**
     * 退出登录
     * @return
     */
    Boolean loginOut();

    /**
     * 新增脚本组件
     * @param dto
     * @return
     */
    Boolean addNode(NodeInsertDto dto);

    /**
     * 修改脚本组件基本信息
     * @param nodeId
     * @param dto
     * @return
     */
    Boolean updateNodeById(String nodeId, NodeUpdateDto dto);

    /**
     * 修改脚本组件的脚本内容
     * @param nodeId
     * @param dto
     * @return
     */
    Boolean updateNodeScriptById(String nodeId, NodeScriptUpdateDto dto);

    /**
     * 删除脚本组件
     * @param nodeId
     * @return
     */
    Boolean deleteNodeById(String nodeId);

    /**
     * 获取脚本组件基本信息
     * @param nodeId
     * @return
     */
    NodeScriptVo getNodeInfoById(String nodeId);

    /**
     * 修改编排的设计json
     * @param chainId
     * @return
     */
    ChainDesignVo getChainDesignJsonById(String chainId);

    /**
     * 获取当前登录用户
     * @return
     */
    HeaderDesignUser getLoginUser();

    /**
     * 获取脚本列表，脚本组件管理页面使用
     * @param searchKey
     * @return
     */
    List<NodeScriptVo> getScriptNodeList(String searchKey);

    /**
     * 修改脚本为禁用状态
     * @param nodeId
     * @return
     */
    Boolean updateNodeDisableById(String nodeId);

    /**
     * 修改脚本为启动状态
     * @param nodeId
     * @return
     */
    Boolean updateNodeEnableById(String nodeId);

    /**
     * 登录
     * @param dto
     * @param response
     * @return
     */
    HeaderDesignUser login(UserLoginDto dto, HttpServletResponse response);
}
